package com.yan.design.two.structure.s7.d2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 7. 代理模式 - 动态代理  - JDK代理
 *      代理类
 * @author shengren.yan
 * @create 2022-08-01
 */
public class ProxyInvocationHandler implements InvocationHandler {

    // 被代理类的接口
    private Object target;

    public void setTarget(Object r){
        this.target = r;
    }

    // 生产代理类
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
    }

    // 处理代理实例 - 并返回结果
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if(method.getName().equals("add")){
            System.out.println(method.getName());
            doA(method.getName());
        }
        // 动态代理本质：使用反射机制实现
        Object obj = method.invoke(target,args);

//        doB();
//        doC();
        return obj;

    }


    public void doA(String string){
        System.out.println("中介看房2..." + string);
    }

    public void doB(){
        System.out.println("中介收费2...");
    }

    public void doC(){
        System.out.println("中介签合同2...");
    }

}
